package Controller.BDD;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import Model.Droit;
import Model.Groupe;
import Model.Utilisateur;

public class GestionRequeteGroupe extends GestionnaireRequeteBDD {
	
	public GestionRequeteGroupe(){

	}
	

	public ArrayList<Groupe> recupererListeDonneesGroupes(String requete){
		ArrayList<Groupe> liste = new ArrayList<Groupe>();
		Connection connection = this.getConnexion();
		if(connection != null){
			Statement statement;
			try {
				statement = connection.createStatement();
				ResultSet res = statement.executeQuery(requete);
				while(res.next()){
					int id = res.getInt(1);
					String libelle = res.getString(2);
					String description = res.getString(3);
					liste.add(new Groupe(id,libelle,description,null,null));
				}
			}catch (SQLException e){
				e.printStackTrace();
				return null;
			}
			if(liste.size()==0){
				this.resetConnexion(connection);
				return null;
			}
			else{
				this.resetConnexion(connection);
				return liste;
			}
		}
		else{
			return null;
		}
	}
	

	public void executeStatement(String requete) {
		Connection connection = this.getConnexion();
		if(connection != null){
			Statement statement;
			try {
				statement = connection.createStatement();
				statement.execute(requete);
				this.resetConnexion(connection);
			}catch (SQLException e){
				e.printStackTrace();
			}
		}	
	}


	public ArrayList<Droit> recupererListeDroitGroupe(String requete) {
		ArrayList<Droit> listeDroit = new ArrayList<Droit>();
		ArrayList<Integer> listeID_Droit = new ArrayList<Integer>();
		Connection connection = this.getConnexion();
		if(connection != null){
			Statement statement;
			try {
				statement = connection.createStatement();
				ResultSet res = statement.executeQuery(requete);
				while(res.next()){
					int id_droit = res.getInt(1);
					listeID_Droit.add(id_droit);
				}
				for(Integer id_droit : listeID_Droit){
					ResultSet res2 = statement.executeQuery("Select * from droits where id="+id_droit+";");
					res2.next();
					String libelle = res2.getString(2);
					String description = res2.getString(3);
					String page = res2.getString(4);
					listeDroit.add(new Droit(id_droit,libelle,description,page));
				}
			}catch (SQLException e){
				e.printStackTrace();
				return null;
			}
			if(listeDroit.size()==0){
				this.resetConnexion(connection);
				return null;
			}
			else{
				this.resetConnexion(connection);
				return listeDroit;
			}
		}
		else{
			return null;
		}
	}


	public ArrayList<Utilisateur> recupererListeUtilisateurGroupe(String requete) {
		ArrayList<Utilisateur> listeUtilisateur = new ArrayList<Utilisateur>();
		ArrayList<Integer> listeID_Utilisateur = new ArrayList<Integer>();
		Connection connection = this.getConnexion();
		if(connection != null){
			Statement statement;
			try {
				statement = connection.createStatement();
				ResultSet res = statement.executeQuery(requete);
				while(res.next()){
					int id_Utilisateur = res.getInt(1);
					listeID_Utilisateur.add(id_Utilisateur);
				}
				for(Integer id_Utilisateur : listeID_Utilisateur){
					ResultSet res2 = statement.executeQuery("Select * from users where id="+id_Utilisateur+";");
					res2.next();
					String libelle = res2.getString(2);
					listeUtilisateur.add(new Utilisateur(id_Utilisateur,libelle,null,null));
				}
			}catch (SQLException e){
				e.printStackTrace();
				return null;
			}
			if(listeUtilisateur.size()==0){
				this.resetConnexion(connection);
				return null;
			}
			else{
				this.resetConnexion(connection);
				return listeUtilisateur;
			}
		}
		else{
			return null;
		}
	}


	public Groupe recupererGroupeParID(String requete) {
		Groupe groupe=null;
		Connection connection = this.getConnexion();
		if(connection != null){
			Statement statement;
			try {
				statement = connection.createStatement();
				ResultSet res = statement.executeQuery(requete);
				while(res.next()){
					int id = res.getInt(1);
					String libelle = res.getString(2);
					String description = res.getString(3);
					groupe= new Groupe(id,libelle,description,null,null);
				}
			}catch (SQLException e){
				e.printStackTrace();
				return null;
			}
		}
		return groupe;
	}
}
